/**
 * ESLint 扁平化配置文件 (Flat Config)
 * 用于配置 Vue + JavaScript/TypeScript 项目的代码规范检查规则
 */
import { defineConfig } from 'eslint/config' // ESLint 配置定义工具
import globals from 'globals' // 全局变量定义（如 browser/node 环境变量）
import js from '@eslint/js' // ESLint 官方核心规则集
import pluginVue from 'eslint-plugin-vue' // Vue 单文件组件专用规则插件
import prettierConfig from 'eslint-config-prettier' // 新增：Prettier 兼容配置
import parserVue from 'vue-eslint-parser'
// import tseslint from '@typescript-eslint/parser'
import tseslint from 'typescript-eslint'

// 使用 defineConfig 定义配置（提供类型提示）
export default defineConfig([
  // 1. 指定应用文件范围：所有 JS 和 Vue 文件
  {
    files: ['**/*.{js,mjs,cjs,vue}'],
  },

  // 2. 配置语言环境：注入浏览器全局变量（如 window, document）
  {
    files: ['**/*.{js,mjs,cjs,vue}'],
    languageOptions: {
      globals: { ...globals.browser, ...globals.node }, // 合并浏览器环境全局变量
    },
  },
  {
    languageOptions: {
      globals: {
        ...globals.browser,
        ...globals.es2020,
        ...globals.node,
      },
      ecmaVersion: 2020,
      parser: parserVue,
      parserOptions: {
        parser: tseslint.parser,
      },
    },
  },
  // 3. 应用 ESLint 官方推荐规则
  {
    files: ['**/*.{js,mjs,cjs,vue}'],
    plugins: { js }, // 注册 @eslint/js 插件
    extends: ['js/recommended'], // 启用推荐规则集
  },

  // 4. 启用 Vue 3 基础规则集（来自 eslint-plugin-vue）
  pluginVue.configs['flat/essential'], // 检查模板语法、组件规范等

  // 自定义规则覆盖
  {
    rules: {
      '@typescript-eslint/no-unused-vars': 'off', // 关闭未使用变量检查
      '@typescript-eslint/no-var-requires': 'off', // 允许使用 require()
      '@typescript-eslint/no-explicit-any': 'off', // 允许使用 any 类型
      '@typescript-eslint/no-this-alias': 'off', // 允许 this 别名
      'no-debugger': 'off', // 允许 debugger 语句

      // ----- Vue 专用规则 -----
      'vue/multi-word-component-names': [
        // 组件名必须多单词
        'error',
        {
          ignores: ['index', 'Header'], // 允许例外的组件名
        },
      ],
      'vue/no-unused-vars': 'off', // 关闭 Vue 未使用变量检查
      'vue/no-template-shadow': 'off', // 允许模板变量遮蔽
      'vue/require-v-for-key': 'off', // 关闭 v-for 必须带 key 的检查
      'vue/no-textarea-mustache': 'off', // 允许 textarea 使用 mustache
      'vue/no-v-html': 'off', // 允许使用 v-html（注意 XSS 风险）
    },
  },
  {
    ignores: [
      'node_modules',
      '*.md',
      '.vscode',
      '.idea',
      'dist',
      '/public',
      '/docs',
      '.husky',
      '.local',
      '/bin',
    ],
  },
  prettierConfig,
])
